// import { userGetInfoService } from '@/api/user'
import { defineStore } from 'pinia'
import { ref } from 'vue'

// 用户模块 token setToken removeToken
export const useUserStore = defineStore(
  'big-user',
  () => {
    const token = ref('')
    const setToken = (newToken) => {
      token.value = newToken
    }
    const removeToken = () => {
      token.value = ''
    }

    // 获取用户信息
    const user = ref({})
    const userPassword = ref('123456')
    const getuser = async () => {
      // 接口失效用自定义数据代替
      // const res = await userGetInfoService() //请求获取数据
      // console.log(res)

      user.value = {
        nickname: '小鹏',
        username: 'xiaopeng',
        id: 97447,
        email: 'xiaopeng@itcast.cn',
        user_pic:
          'https://gips1.baidu.com/it/u=1005182956,585006243&fm=3074&app=3074&f=PNG?w=2048&h=2048',
      }
    }
    // 清除用户信息
    const setUser = (obj) => {
      user.value = obj
    }

    // 新增：更新用户信息（针对性更新昵称/邮箱，保留其他字段）
    const updateUserInfo = async (updateData) => {
      try {
        // --------------------------
        // 步骤1：若后续接口恢复，替换为真实接口请求
        // 逻辑说明：调用后端更新接口，传入需要修改的字段（如 nickname/email）
        // const res = await userUpdateInfoService(updateData)
        // const updatedUser = res.data // 接口返回的更新后完整用户信息
        // --------------------------

        // 步骤2：当前模拟接口逻辑（用传入的表单数据更新本地状态）
        // 核心：只更新传入的字段（如 nickname/email），保留 id/username/user_pic 等不变
        const updatedUser = {
          ...user.value, // 保留原有所有字段
          ...updateData, // 用新数据覆盖需要更新的字段（如 nickname/email）
        }

        // 步骤3：更新本地 user 状态（自动同步到 Pinia 持久化）
        user.value = updatedUser

        // 步骤4：返回更新后的用户信息，方便组件接收结果
        return updatedUser
      } catch (error) {
        // 错误处理：打印日志并抛出错误，让组件捕获提示
        console.error('更新用户信息失败：', error)
        throw new Error(error.message || '修改资料失败，请重试')
      }
    }
    // 更新头像
    const updateUserAvatar = async (avatarSource) => {
      try {
        // --------------------------
        // 步骤1：判断头像来源类型（本地 File 对象 / 直接传入的 URL 字符串）
        let avatarUrl = ''
        if (avatarSource instanceof File) {
          // 场景1：传入的是本地文件（如用户选择的图片文件）
          // 场景1 模拟逻辑：用 URL.createObjectURL 生成临时预览 URL（仅前端预览用）
          // 注意：模拟场景下，刷新页面后临时 URL 会失效；真实接口需用后端返回的永久 URL
          avatarUrl = URL.createObjectURL(avatarSource)
        } else if (typeof avatarSource === 'string') {
          // 场景2：传入的是直接可用的头像 URL（如从相册选择的在线图片 URL）
          avatarUrl = avatarSource
        } else {
          throw new Error('头像来源无效，请传入 File 对象或 URL 字符串')
        }

        // 步骤2：更新本地 user 状态的 user_pic 字段
        const updatedUser = {
          ...user.value,
          user_pic: avatarUrl, // 覆盖原有头像 URL
        }
        user.value = updatedUser

        // 步骤3：返回更新后的头像 URL，方便组件同步预览
        return avatarUrl
      } catch (error) {
        // 错误处理：打印日志并抛出错误，让组件捕获提示
        console.error('更新用户头像失败：', error)
        throw new Error(error.message || '头像更新失败，请重试')
      }
    }
    return {
      token,
      setToken,
      removeToken,
      user,
      userPassword,
      getuser,
      setUser,
      updateUserInfo,
      updateUserAvatar,
    }
  },
  {
    persist: true, // 持久化
  },
)
